package com.hxm.demo.huawei;

import java.util.*;

public class TestHJ25 {

    /**
     * ﻿一组输入整数序列I和一组规则整数序列R，I和R序列的第一个整数为序列的个数（个数不包含第一个整数）；整数范围为0~(2^31)-1，序列个数不限
     * <p>
     * 输出描述：
     * ﻿从R依次中取出R<i>，对I进行处理，找到满足条件的I：
     * <p>
     * I整数对应的数字需要连续包含R<i>对应的数字。比如R<i>为23，I为231，那么I包含了R<i>，条件满足 。
     * <p>
     * 按R<i>从小到大的顺序:
     * <p>
     * (1)先输出R<i>；
     * <p>
     * (2)再输出满足条件的I的个数；
     * <p>
     * (3)然后输出满足条件的I在I序列中的位置索引(从0开始)；
     * <p>
     * (4)最后再输出I。
     * <p>
     * 附加条件：
     * <p>
     * (1)R<i>需要从小到大排序。相同的R<i>只需要输出索引小的以及满足条件的I，索引大的需要过滤掉
     * <p>
     * (2)如果没有满足条件的I，对应的R<i>不用输出
     * <p>
     * (3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)
     *
     * @param args
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.nextLine();
            String b = in.nextLine();
            String[] sa = a.split(" ");
            String[] sb = b.split(" ");
            int[] sa1 = new int[Integer.parseInt(sa[0])];
            int[] sb1 = new int[Integer.parseInt(sb[0])];
            Set<Integer> set = new TreeSet<>();
            for (int i = 0; i < sa.length - 1; i++) {
                sa1[i] = Integer.parseInt(sa[i + 1]);
            }
            for (int i = 0; i < sb.length - 1; i++) {
                sb1[i] = Integer.parseInt(sb[i + 1]);
            }

            for (int i : sb1) {
                set.add(i);
            }
            int[] sb2 = new int[set.size()];
            int k = 0;
            for (Integer integer : set) {
                sb2[k] = integer;
                k++;
            }

            Map<Integer, String> map = new LinkedHashMap<>();
            int num = 0;
            for (int i = 0; i < sb2.length; i++) {
                int count = 0;
                for (int j = 0; j < sa1.length; j++) {
                    if (String.valueOf(sa1[j]).indexOf(String.valueOf(sb2[i])) != -1) {
                        map.put(sb2[i], map.getOrDefault(sb2[i],"") + " " + j + " " + sa1[j]);
                        count++;
                        num += 2;
                    }
                }
                if (count > 0) {
                    map.put(sb2[i], " " + sb2[i] + " " + count + map.get(sb2[i]));
                    num += 2;
                }
            }
            System.out.print(num);
            for (Integer key : map.keySet()) {
                System.out.print(map.get(key));
            }
        }
    }
}
